package com.demo.Main.FtpUtil;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class TzpStage2 {
    public static void main(String[] args) {
        //使用链式调用
        check(getfile("localfile/info.json"));
        sendFiles(getfile("localfile/info.json"));
    }
    /*
    getfile()方法负责读取info.json文件，返回JSONArray对象
     */
    public static JSONArray getfile(String str) {
        JSONArray jsonarray = null;
        try (FileInputStream fis = new FileInputStream(new File(str))){
            //把读出的字节转为String类型赋给字符串s
            String s = new String(fis.readAllBytes());
            //把字符串s转为JSONArray类型并传给jsonarray
            jsonarray = new JSONArray(s);
        } catch (FileNotFoundException e) {
            throw new RuntimeException("抱歉！文件不存在！",e);
        } catch (IOException e) {
            throw new RuntimeException("读取文件失败！",e);
        }
        return jsonarray;
    }
    /*
    check()方法负责检测服务器是否正常运行以及用户是否都能正常登录
     */
    public static void check(JSONArray jsonArray){
        // 初始化标志变量
        boolean isInvalidUser = false;
        //遍历json文件中的管理员信息
        for(int i=0;i<jsonArray.size(); i++) {
            //拿到当前管理员信息
            JSONObject json = jsonArray.getJSONObject(i);
            //获得当前这个信息中的ip地址
            String s = json.getStr("ip");
            //向服务器发送get请求，设置两秒后连接超时
            HttpRequest httpRequest = HttpRequest.get(s).timeout(2000);
            //创建响应体对象
            HttpResponse execute = null;
            try {
                //发送get请求获得响应体对象
                execute = httpRequest.execute();
                //打印响应状态码
                System.out.println("执行成功：" + execute.getStatus());
                // 根据状态判断是否异常，输出相应信息
                if (execute.getStatus() != 200) {
                    System.out.println("服务器状态异常：" + json.getStr("ip"));
                }
            } catch (Exception e) {
                System.out.println("连接超时：" + json.getStr("ip") );
                isInvalidUser = true; // 设置标志变量为 true
            }
            if (isInvalidUser) {
                System.out.println("存在无法登录的用户");
            } else {
                System.out.println("所有用户均可登录");
            }
        }
    }
    /*
    sendFiles()方法负责向服务器上传文件以及判断是否上传成功
     */
    public static void sendFiles(JSONArray jsonArray){
        //获取文件内的服务器个数
        int size = jsonArray.size();
        //对每个服务器发送文件
        for (int i = 0; i < size; i++) {
            JSONObject json = jsonArray.getJSONObject(i);
            //获得当前这个信息中的ip地址
            String s = json.getStr("ip");
            //获得当前这个信息中的端口
            int port = json.getInt("port");
            //获得用户名
            String user = json.getStr("username");
            //获得密码
            String password = json.getStr("password");
            // 获取要传输的文件
            String file = json.getStr("file");
            // 设置文件名称
            String filename = file.split("/")[1];
            try (FileInputStream fis = new FileInputStream(file)){
                //发送文件并判断是否发送成功
                boolean upload = FTPTools.upload(s, port, user, password, "", new FileInputStream(file), filename);
                System.out.println(upload?s+"服务器"+"文件上传成功":s+"服务器"+"文件上传失败");
            } catch (FileNotFoundException e) {
                System.out.println("文件未读取到");
            } catch (IOException e) {
                System.out.println("上传失败");;
            }
        }
    }
}